/*
 * Copyright The Stargate Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package io.stargate.sgv2.api.common.grpc.configuration;

import io.quarkus.grpc.GrpcClient;
import io.stargate.bridge.proto.StargateBridge;
import io.stargate.sgv2.api.common.config.GrpcConfig;
import io.stargate.sgv2.api.common.grpc.RetriableStargateBridge;
import io.stargate.sgv2.api.common.grpc.qualifier.Retriable;
import io.stargate.sgv2.api.common.grpc.retries.GrpcRetryPredicate;
import jakarta.enterprise.inject.Instance;
import jakarta.ws.rs.Produces;

public class RetriableStargateBridgeConfiguration {

  @Produces
  @Retriable
  RetriableStargateBridge retriableStargateBridge(
      @GrpcClient("bridge") StargateBridge stargateBridge,
      Instance<GrpcRetryPredicate> predicate,
      GrpcConfig grpcConfig) {
    return new RetriableStargateBridge(stargateBridge, predicate.get(), grpcConfig);
  }
}
